//
// Created by Martin on 2021/10/2.
//

#ifndef DESIGNPATTERN_CPP_FLYWEIGHTFACTORY_H
#define DESIGNPATTERN_CPP_FLYWEIGHTFACTORY_H

#include "Flyweight.h"
#include <unordered_map>

/**
 * 享元工厂
 * 创建并管理flyweight对象, 确保合理共享flyweight
 * @note 当用户请求获得一个flyweight对象时, FlyweightFactory提供一个已创建的实例或创建一个(如果map中不存在).
 * 因为示例只有一个享元工厂, 就使用静态方法(类方法)
 */
class FlyweightFactory {
public:
    // 定义一个容器池
    // 类的静态成员声明, static修饰类成员时, 只能用在类内
    static std::unordered_map<std::string, Flyweight*> pool;

    // 享元工厂
    static Flyweight* getFlyweight(std::string& extrinsic);
};


#endif //DESIGNPATTERN_CPP_FLYWEIGHTFACTORY_H
